¿Cómo se usa R?

R puede ser utilizado de forma interactiva iniciándolo directamente de cualquier terminal de BASH (en sistemas UNIX-like), o desde el “Simbolo del sistema” o haciendo doble click en el ejecutable típicamente localizado en “C:\Program Files\R\R-version\bin\x64\” (en sistemas Windows). Por ejemplo en cualquier distribución GNU/Linux, bastará con abrir la terminal e ingresar el comando “R”.


Click en la imagen para agrandar.

Cuando R es iniciado de esa forma, veremos un texto con una pequeña presentación de R, incluyendo la versión que se está ejecutando y algunas ayudas básicas. Luego de este texto, vemos una linea vacía comenzada por el carácter >. Este último carácter se conoce como prompt y nos indica que R está listo para recibir órdenes. Así pues, podríamos pedir que nos imprima una bienvenida al curso utilizando la función print(), haciendo por ejemplo:

print("Bienvenides al curso!!!")


Click en la imagen para agrandar.

Aún funcionando desde un CLI sin una interfaz gráfica, debido a que R está pensado para funcionar en sistemas de ventanas, es posible realizar gráficos y estos se mostraran en una nueva ventana exclusivamente creada para tal fin. Podríamos por ejemplo graficar 3 puntos de diferentes colores, ubicados en las coordenadas (x,y)=(1,1 ; 2,1 ; 3,1):

plot(1:3, rep(1,3), pch=16, col=c("blue","red","black"), cex=5)


Click en la imagen para agrandar.

Como al usar R de esta forma solo podremos ir ejecutando de a una orden a la vez, puede ser conveniente disponer de algún editor de texto plano para poder ir guardando nuestro código a medida que lo vamos escribiendo y ejecutando. Para ello podemos utilizar cualquier editor de texto plano (e.g., en GNU/Linux podemos usar “gedit” o el editor que traiga nuestra distribución; en Windows podemos utilizar “Bloc de Notas”, “Notepad++”, etc). Aprovechando el espacio del escritorio de nuestra PC podríamos entonces hacer una disposición con las ventanas abiertas de nuestra terminal donde ejecutamos R, la ventana gráfica donde se mostrarán nuestros gráficos, el archivo de texto plano con nuestro código y podríamos sumar también una ventana con las carpetas donde estamos guardando el trabajo y desde donde leeremos los datos que cargaremos a R. Algo parecido a lo siguiente:


Click en la imagen para agrandar.

Finalmente, si deseamos salir de la sesión de R activa, podemos utilizar la función quit() (o su forma abreviada q()), a lo que R responderá preguntando si queremos guardar una imagen del espacio de trabajo, a lo que responderemos que NO ingresando n. Esto cerrara cualquier ventana gráfica que hubiera abierta, así como en nuestra terminal veremos que el prompt vuelve a ser el de nuestro sistema.


Click en la imagen para agrandar.

Ejercicio 1

Abra R desde una terminal de su sistema operativo e intente replicar las líneas de código mostradas en la parte previa, de paso, sabremos que su sistema tiene correctamente instalado R.


Presentando a RStudio

A pesar de lo sencillo que resulta usar R nativamente en cualquier sistema, para ahorrarnos tener usar multiples programas en simultáneo, así como para sumar toda una gran coleccion de funcionalidades y herramientas que nos facilitarán mucho el trabajo, es recomendable utilizar R en conjunto con alguna IDE. En este curso, utilizaremos RStudio.


Click en la imagen para agrandar.

En la figura precedente podemos identificar rápidamente las principales áreas de trabajo con diferentes funcionalidades que nos ofrece el programa (estos paneles pueden maximizarse, minimizarse o redimensionarse a gusto con el puntero del mouse, así como personalizarse en “Tools > Global Options > Pane Layout”):

  1. Consola: una consola de R equivalente a la que iniciamos previamente y con la misma funcionalidad.
  2. Fuente: equivalente al editor de texto plano (este panel puede no abrirse por defecto si todavía no creamos ninguna rutina, para ello hacer “File > New File > R Script” o click en el botón [a])
  3. Entorno: muestra todos los objetos creados ordenados por tipo, permite la carga de dataset gráficamente y la gestión de la memoria en uso.
  4. Archivos, Gráficos, Paquetes, Ayuda: esta es una área de mucho uso ya que permite ver y manipular el sistema de archivos dónde estamos trabajando [b], así como gestionar los paquetes de R gráficamente [c]. Además, cambiará automáticamente al área gráfica cuando realicemos un gráfico [d] y cambiará a las ayudas internas disponibles en caso de solicitarlo [e].

Cuando tengamos una rutina creada, podremos ejecutar directamente desde la misma el código sin necesidad de “copiar y pegar” en la consola de R. Para ello, con el cursor de texto sobre la linea de código podemos utilizar el botón Run ubicado en el sector superior derecho del panel Fuente, o utilizar el atajo de teclado Ctrl + Enter. Esto mismo podemos hacerlo sobre varias líneas, seleccionando con el cursor todas aquellas líneas que querramos ejecutar.

Para prestar atención: una rutina no es más que una serie ordenada de órdenes que se ejecutan una tras otra. Por defecto, siempre que ejecutemos una rutina completa, no importa si lo hacemos línea a línea o seleccionado todo el conjunto, la ejecución subyacente es secuencial. Para romper este comportamiento existen estructuras especiales conocidas como “Estructuras de control de flujo”, que estudiaremos más adelante.

Para pensar: en el ejemplo de la figura previa existen líneas que comienzan con un caracter # (llamado de muchas formas: numeral, almohadilla, hashtag). Si presta atencion, esas líneas están coloreadas de forma homogénea en el editor y, además, aparentan tener mensajes que explican el código. ¿Qué imagina que sucede cuando se ejecutan? ¿Cómo se llama y qué función cumplen esas líneas? Más adelante veremos otra forma adicional de utilizarlas para organizar nuestro código en RStudio.

Proyectos en RStudio

Una de las primeras nociones sobre las buenas prácticas de trabajo es intentar mantener una organización coherente de nuestro código, así como de los archivos de entrada (i.e. los datos) y salida (i.e. resultados, gráficos, etc). Aunque estrictamente no existe una forma única ni correcta de organización y cada persona debe encontrar lo que le resulta más práctico, siempre debemos considerar que existen potenciales receptores de nuestro código que idealmente tendrían que interpretar con el menor esfuerzo posible la organización seguida. Incluso podemos ser nostros mismos quienes en un futuro revisitemos algo que hicimos hace un tiempo y le estaremos enormemente agradecidos a nuestra versión del pasado por haber mantenido una organización coherente.

Cuando trabajamos con RStudio, esto último puede ser muy sencillo de realizar utilizando los proyectos, que no son otra cosa más que una forma de mantener nuestro trabajo en un contexto dado, con su propio directorio de trabajo, historial, rutinas, entradas, salidas, etc. De esta forma, pensemos por ejemplo en una organización con una estructura hipotética similar a la siguiente:

AnalisisTesis
  |
  |-- CapII
  |     |
  |     |-- datos
  |     |     |-- muestreoEne-Mar.csv
  |     |     |-- muestreoAgo-Oct.csv
  |     |      
  |     |--resultados
  |     |     |-- diversidad.txt
  |     |     |-- composicion.txt
  |     |     |-- graficos
  |     |            |-- fig_div_estacion.pdf
  |     |            |-- fig_NMDS.pdf
  |     |
  |     |-- analisis
  |           |-- exploratorios.R
  |           |-- anova.R
  |           |-- NMDS.R
  |-- CapIII
  |     |
  |    ...
 ...

En este caso, podríamos entonces pensar en crear un proyecto para todo el conjunto de “AnalisTesis” o podemos subdividir y crear un proyecto por cada capítulo que requiera realizar algun tipo de análisis. De nuevo, no hay una manera única, todo dependerá del contexto y lo que resulte -o parezca resultar- óptimo en cada situación.

Existen múltiples formas de crear un nuevo proyecto. Podemos hacer “File > New Project…”; podemos usar el botón en la esquina superior izquierda; o utilizar el menú de proyectos Project: (None), situado en la esquina superior derecha. A la hora de crear un nuevo proyecto, podemos elegir partir de un directorio nuevo o de uno previamente creado. Así mismo, podemos elegir un tipo específico de proyecto según si estemos haciendo un proyecto general, un proyecto para un nuevo paquete de R, una aplicación Shiny, etc. Todo esto se realiza mediante una serie de menús gráficos que se nos irán presentado y que son sumamente intuitivos de seguir.

Ejercicio 2

Luego de ver la demostración del docente sobre la creación de proyectos en RStudio, abra una sesión propia de RStudio y cree un proyecto para este curso. La organización sugerida es la siguiente:

fundamentosR
  |
  |-- fundamentosR.Rproj
  |-- dia1
  |     |-- mi_rutinaR.R
  |
  |--dia2
  |--dia3
 ...

A medida que el curso avance, iremos completando estos directorios con datos, rutinas, etc.

Ejercicio 3

Cree una rutina dentro de dia1, como se muestra en la estructura precedente, que contenga el código ejecutado en el Ejercicio 1 para el mensaje de bienvenida y el gráfico. Corra esas líneas y explore las funciones del panel gráfico. Finalmente, guarde el mismo como un archivo PNG dentro del directorio dia1.

El directorio de trabajo

Cuando trabajamos con R, implícitamente lo estamos haciendo en alguna ubicación de nuestro sistema de archivos. Los proyecto de RStudio facilitan esta cuestión haciendo que el directorio de trabajo sea aquel en el cual creamos el proyecto. Para conocer en donde estamos trabajando, podemos utilizar la función getwd(). Por ejemplo, mientras escribo esta guía puedo ver en qué ubicación se encuentra el proyecto en la cual la estoy realizando (Sí! R es tan versátil, que hasta podemos crear páginas web y cualquier otro tipo de documento con su propio formato, imágenes embebidas, vínculos de internet, etc.):

getwd()
## [1] "/home/usuario/cursoR/clases/2_usandoR"

Si por algun motivo deseara cambiar el directorio de trabajo, puedo hacerlo desde el menú “Session > Set Working Directory > Choose Directory” o, de forma más sencilla, utilizar la función setwd():

setwd("/home/usuario/R/mi_proyecto_de_R") # ejecución sin salida en consola
getwd() # muestra el nuevo working directory
## [1] "/home/usuario/R/mi_proyecto_de_R"
setwd("/home/usuario/cursoR/clases/2_usandoR/") # regreso al original
getwd() # muestra el nuevo working directory
## [1] "/home/usuario/cursoR/clases/2_usandoR"

Rutas relativas y absolutas

Una ruta (en inglés path) en R o en cualquier otro sistema informático es la “dirección” de cada archivo que existe en el sistema de archivos. De forma general, existen dos formas de representar a cualquier ruta:

  • Las rutas absolutas son aquellas en las que explícitamente se indica todo el trayecto realizado desde la ráiz del sistema hasta la ubicación en cuestión. En los sistemas GNU/Linux, la raíz del sistema es / (llamado root); mientras que en los sistemas Windows será el origen del disco que este utilizándose, típicamente C:\. Teniendo esto en cuenta, la ruta anterior al directorio de trabajo es una ruta absoluta, ya que en la misma se explicita toda la ruta desde la raíz hasta el archivo.

  • Las rutas relativas por su parte, nos muestran la ubicación de un archivo o directorio en sentido relativo al directorio de trabajo activo. Generalmente, las mismas empiezan con uno o dos caracteres de punto “.”, teniendo la expresión ./ el significado literal de “en este directorio”, es decir, en el directorio actual; mientras que la expresión ../ indica el directorio superior en la jerarquía del directorio actual. Tener en cuenta que en sistemas Windows, el caracter que separa directorios es la “barra inversa”, por lo que en esos sistemas será: .\ y ..\.

Como ejemplo, tomando como referencia la estructura sugerida para el proyecto del curso, si el directorio de trabajo activo fuera analisis dentro de dia1, la ruta relativa a CapIII seria ../../CapIII

Ejercicio 4

Imagine que dentro del directorio /home/usuario/Documentos, posee la siguiente estructura de directorios:

carpeta0/
├── archivo0_a
├── archivo0_b
├── carpeta1
│  ├── archivo1_a
│  ├── archivo1_b
│  └── archivo1_c
└── carpeta2
    ├── archivo2_a
    ├── archivo2_b
    └── carpeta2a
        ├── archivo2a_a
        └── carpeta2b
            └── archivo2b_a     
  • ¿Cuál sería la ruta absoluta al archivo “archivo1_c”?

  • ¿Como sería la ruta relativa desde el directorio “carpeta2b” hacia el archivo “archivo1_c”?

Las rutas en los proyectos de RStudio

Cuando trabajamos dentro de un proyecto de RStudio, todas las rutas son relativas a la raíz del proyecto. Esto tiene algunas ventajas, como por ejemplo si compartimos nuestro proyecto con colaboradores, estos no necesitarán configurar las rutas para su sistema, ya que las rutas se mantienen relativas al proyecto. Por otro lado, no es necesario que anonimicemos nuestras rutas, ya que si trabajamos exclusivamente dentro de la carpeta raíz del proyecto, no debería aparecer ninguna ruta absoluta. Las razones por las que quisiéramos mantener nuestras otras carpetas internas privadas son muchas, y variarán en cada caso, pero para un ejemplo interesante podemos considerar el siguiente caso:


Click en la imagen para agrandar.

Por cierto, Alexandra es, ni más ni menos, la creadora del sitio Sci-Hub y esa captura corresponde a una guía básica para voluntarias/os de Anna’s Archive.


Buscando ayuda en R

Una de las cosas que más intimidan a quienes intentan aprender un lenguaje de programación suele ser intentar recordar el nombre de todas las funciones disponibles y cómo se usa exactamente cada una. Pero lo cierto es que esto rara vez preocupa a un quienes llevan un tiempo inmersos en algún lenguaje. Esto es así, ya que como el resto de los lenguajes más populares, R posee un compendio de documentación interna que explica detalladamente cada uno de sus funciones. Esta ayuda se encuentra disponible desde la instalación de R, así como de cada uno de los paquetes de CRAN, y puede ser consultada incluso fuera de línea.

Existen múltiples formas de consultar esta documentación. Si nos encontramos trabajando directamente desde una consola de R, podremos invocar la ayuda con la función help(funcion), donde funcion es el nombre de la función o el objeto sobre el que estamos requiriendo la documentación. Por ejemplo, con la formula help(help) podemos obtener la ayuda de la función de ayuda:


Click en la imagen para agrandar.

Así mismo, disponemos de un homólogo a la función previa, que es la función ?funcion y en caso de que queramos buscar con una palabra clave, ya que no recordamos siquiera el nombre de la función o paquete, podemos utilizar ??palabraclave.

En RStudio, como ya mencionamos antes, disponemos incluso de un área específica para mostrar la ayuda. Está área se activara automáticamente al solicitar alguna ayuda, e incluso disponemos de una función de autocompletado con ayudas en ventanas emergentes. Para activarla, solo debemos comenzar a escribir el nombre de la función y apretar la tecla Tab ↹. En la siguiente figura, podemos ver que sucede al comenzar a escribir “me + Tab ↹”:


Click en la imagen para agrandar.

Ejercicio 5

En RStudio corra las siguientes líneas de a una y observe que salidas que le brinda el programa. Anímese a explorar, no hay nada que pueda romper, haga click aquí y allá, vaya y vuelva. Así mismo, intente utilizar el autocompletado y las ayudas emergentes, fomente su creatividad buscando lo que se le ocurra, o intente averiguar como se usa esa función que hace 2 o 3 semanas que no logra ejecutar sin error. En clase discutiremos que partes componen la ayuda y como interpretarla.

help(help)
?help
??distance
?plot

Foros y bitácoras de la comunidad

Además de estas útiles ayudas offline, si contamos con una conexión a internet, por supuesto no dudaremos en hacer uso extensivo del buscadores. Muchas veces, más que saber cómo opera una función en particular, queremos conocer como realizar una acción dada, con el método que sea. Aprender a buscar, es en sí mismo un arte. Como vimos antes la cantidad de sitios con información sobre R es inabarcable y muchas veces podemos perdernos en el afán de encontrar lo que buscamos, por ello a continuación veremos algunas recomendaciones.

  • El idioma en que buscamos importa. Como para cualquier otra búsqueda, no encontraremos los mismos recursos si buscamos en español que si buscamos en inglés.


Click en la imagen para agrandar.

  • Existen múltiples foros que incluyen hilos específicos para R, buscar en ellos muchas veces es una forma segura de aprender como hacer algo. La única recomendación en este sentido, aunque no podemos enfatizarla lo suficiente, es que nunca debemos ejecutar código que no comprendamos. Si creemos que cierto fragmento de código nos puede ser útil, primero intentemos entenderlo con un ejemplo de juguete, en una sesión nueva, lejos de nuestras rutinas de los análisis en curso. Cuando pensemos que hemos podido entender como funciona, entonces ya estamos listos para trasladar ese código a nuestra rutina. Si no encontramos la respuesta al problema específico que tenemos, en estos foros también podemos realizar una pregunta y nos responderán bastante rápido. La clave, es poder expresar concretamente el problema, el resultado esperado y, en medida de lo posible, brindar un set de datos mínimo que sirva de ejemplo al que realmente queremos procesar. A continuación un ejemplo de Stack Overflow


Click en la imagen para agrandar.

  • Ademas de los foros, existe una cantidad inmensa de artículos en sitios webs dedicados a R, así como en blogs personales. Muchas personas, que de hecho investigan en problemas similares a los nuestros, dedican mucho tiempo a publicar soluciones en R, así como muchas veces incluyen apartados con explicaciones teóricas sobre ciertos tópicos. Nunca esta de más tomarse el tiempo para ver que encontramos. Debajo un ejemplo correspondiente a los materiales correspondientes a un sitio sobre Analisis de ecologia de comunidades en R.


Click en la imagen para agrandar.

Los errores como una oportunidad de aprendizaje

Muy frecuentemente nos encontraremos con errores en la ejecución de alguna línea. Lejos de desanimarnos y/o frustrarnos, debemos pensar que los errores son una oportunidad de aprendizaje. Los errores puede ir desde pequeños errores de tipeo, hasta la falta de memoria de cómputo para la acción requerida, pasando por operaciones imposibles de realizar o falta de argumentos obligatorios en las funciones. En cualquier caso, lo primero que debemos intentar es mantener la calma e intentar interpretar el mensaje de error. Si no logramos solucionarlo por nuestra cuenta, siempre podemos copiar el mensaje y ver que ayuda obtenemos en línea.

data(iris)
iris[iris$Sepal.Length > 3]
## Error in `[.data.frame`(iris, iris$Sepal.Length > 3): undefined columns selected


Click en la imagen para agrandar.

Sobre los warnings: ocasionalmente R no producirá un mensaje de error, sino una advertencia. En estos casos, también es importante que intentemos entender que está ocasionando este mensaje para saber si es algo crítico o no, sobre todo en cuanto a resultados de análisis se refiere.

Uso de IA

Otra fuente de ayuda en los tiempos modernos, es recurrir al chatbot de inteligencia artificial de su preferencia.

Pablo: te tiras una recomendaciones aquí… alguna capturita o ejemplo de esto que te parezca interesante…


Instalación y carga de paquetes

Desde CRAN, install.packages(), library() y RStudio

Instalación desde otros repositorios